package com.example.boot1.conttoller;

import com.example.boot1.bean.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;



@RestController
public class UserController {

    /**
     *  springmvc 请求参数的复习
     *  浏览器请求为：http://localhost:8080/login/jack/123
     * @param name
     * @param pass
     * @return
     */
    @RequestMapping("/login/{name}/{pass}")
    @ResponseBody
    public String login(@PathVariable String name, @PathVariable String pass){
        System.out.println("---name---"+name);
        System.out.println("---pass---"+pass);
        return "ok";
    }

    /**
     * springmvc 参数为：对象类型
     * User 请求传过来几个参数就给user 对应的属性 赋值
     * postman 请求方式为 raw ==> json
     * {"name":"Zhang San"}
     * @param u
     * @return
     */
    @RequestMapping("/saveUser")
    public String saveUser(@RequestBody User u){
        System.out.println("---user---name---"+u.getName());
        System.out.println("---user---pass---"+u.getPass());
        System.out.println("---user---phone---"+u.getPhone());
        return "okk";
    }

    /**
     * 去掉@RequestBody 注解，直接是user 对象
     * postman 请求在Body ==> form-data (表单) 选项卡中填写 user 对应的属性和值
     * url:  http://localhost:8080/saveUser1
     * @param user
     * @return
     */
    @PostMapping("/saveUser1")
    public String saveUser1(User user){
        System.out.println("---user---"+user.hashCode());
        System.out.println("---user---name---"+user.getName());
        System.out.println("---user---pass---"+user.getPass());
        return "okk1";
    }


    /**
     * user 有student作为 引用对象
     * 表单请求方式postman form-data
     * key : student.classname             value :"三班"
     * key : student.grade                 value: 5
     * @param user
     * @return
     */
    @RequestMapping("/saveUser2")
    @ResponseBody
    public String saveUser2(User user){
        System.out.println("---user2---name---"+user.getName());
        System.out.println("---user2---student-classname--"+user.getStudent().getClassname());
        System.out.println("---user2---student-grade--"+user.getStudent().getGrade());
        return "saveOK!";
    }

    /**
     *   user 有student作为 引用对象
     *   表单请求方式postman row--json
        请求参数: {
             "name":"王五",
             "student":{
             "classname":"五班",
             "grade":5
             }
         }

     * @param user
     * @return
     */
    @RequestMapping("/saveUser3")
    @ResponseBody
    public String saveUser3(@RequestBody  User user){
        System.out.println("---user3---name---"+user.getName());
        System.out.println("---user3---student-classname--"+user.getStudent().getClassname());
        System.out.println("---user3---student-grade--"+user.getStudent().getGrade());
        return "saveOK!";
    }

    /**
     * postman 调用传的参数为name ,后台方法接受的是username，如 select(String username)
     * 此时后台不会报错，但也接受不到数据
     * 想要后台适配postman传递过来的参数那么 如select(@RequestParam("name") String username)
     * username 就会接受到 name 传递过来的值
     * @param username
     * @return
     */
    @ResponseBody
    @RequestMapping("/select")
    public String select(@RequestParam("name") String username){
        System.out.println("---select---name---"+username);
        return "selcet:ok!";
    }


    /**
     * 多项选择 --- 复选框 form 表单中请求数据
     * @param arr
     * @return
     */

    @ResponseBody
    @RequestMapping("/saveArr")
    public String saveArr(String[] arr){
        if (null!=arr && arr.length>0){
            System.out.println("---数组大小---"+arr.length);
            for (int i = 0; i <  arr.length; i++) {
                System.out.println(arr[i]);
            }
            return "save arr success!";
        }else{
            System.out.println("---数组为空----");
            return "save arr 数组为空!";
        }
    }

    /**
     * 对象中的集合 user对象中的集合 interests
     * postman 请求方式为 raw ==> json
     {
         "interests":[
            "str1","str2","str3"
         ]
     }
     * @param user
     * @return
     */
    @ResponseBody
    @RequestMapping("/saveArr2")
    public String saveArr2(@RequestBody  User user){
        if (null!= user ){
            System.out.println(user.getInterests().toString());
        }
        return "save arr2 success!";
    }


}
